// Copyright [2020] <unknown>
#include <bits/stdc++.h>
using namespace std;
// #define ONLINE_JUDGE
#ifndef ONLINE_JUDGE
#define dbg(x...) { cerr << "\033[32;1m" << #x << " -> "; err(x); }
void err() { cerr << "\033[39;0m" << endl; }
template<typename T, typename... A>
void err(T a, A... x) { cerr << a << ' '; err(x...); }
#else
#define dbg(...)
#endif

#define sz(x) ((int)x.size())

typedef long long LL;

const int N = 5e5+50;

int n;

struct kmp
{
    int s[1000010],t[1000010],Next[1000010];
    int n, m;
    void Pre_KMP()
    {
        for (int i=0;i<=m;i++)
            Next[i]=0;
        int j=0,k=-1;
        Next[0]=-1;
        while(j<m)
        {
            if (k==-1||t[j]==t[k]) Next[++j]=++k;
            else k=Next[k];
        }
    }
    // int KMP()
    // {
    //     int i=0,j=0;
    //     while(i<n&&j<m)
    //     {
    //         if (j==-1||s[i]==t[j]) i++,j++;
    //         else j=Next[j];
    //     }
    //     if (j==m) return i-m;
    //     else return -1;
    // }
}K;

char s[N], t[N], ans[N];

int suf[N][2];

void fillin(char s[], int num[2]) {
    int len = strlen(s);
    for (int i=0; i<num[0]; ++i)
        s[len++] = '0';
    for (int i=0; i<num[1]; ++i)
        s[len++] = '1';
    s[len] = 0;
}

int main(int argc, char const *argv[]) {
    scanf("%s", s);
    scanf("%s", t);
    int n = strlen(s), m = strlen(t);
    K.m = m;
    for (int i=0; i<m; ++i)
        K.t[i] = t[i];
    K.Pre_KMP();
    int *nx = K.Next;
    for (int i=m-1; i>=0; --i) {
        suf[i][0] = suf[i+1][0] + (t[i] == '0');
        suf[i][1] = suf[i+1][1] + (t[i] == '1');
    }

    int p = nx[m];
    // dbg(p);
    // for (int i=0; i<=m; ++i)
    //     dbg(i, nx[i]);
    int cost[2] = { suf[p][0], suf[p][1] };

    int num[2] = {0, 0};
    for (int i=0; i<n; ++i)
        num[s[i]-'0']++;

    int tot[2] = {0, 0};
    for (int i=0; i<m; ++i)
        tot[t[i]-'0']++;
    // dbg(cost[0], cost[1]);
    if (num[0] >= tot[0] && num[1] >= tot[1]) {
        num[0] -= tot[0];
        num[1] -= tot[1];
        strcpy(ans, t);
        int cur = m;
        ans[m] = 0;

        while (num[0] >= cost[0] && num[1] >= cost[1]) {
            num[0] -= cost[0];
            num[1] -= cost[1];
            strcpy(ans + cur, t + p);
            cur += (m-p);
            ans[cur] = 0;
        }
    }

    fillin(ans, num);
    printf("%s\n", ans);
    return 0;
}
